Programmable logic devices (PLDs) are a well-known type of programmable integrated circuit (IC) that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet and so forth.
Each programmable tile may include both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). In some FPGAs, the interconnect lines may include single, double, quad, and long lines, which refer to the relative lengths of the interconnect lines. The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable logic are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Qualifying a programmable IC for purposes of determining a maximum clock rate at which the IC may be operated can be challenging, because programmable ICs are highly configurable. For example, the clock network for distributing clock signals throughout the programmable IC includes PIPs, and the delay through a PIP is highly dependent on the context in which the PIP is used. Assuming a worst case delay for a context of a PIP may result in an underestimation of the maximum clock rate.
Past approaches for validating clock signal delays that were on measured values of elements of a programmable IC employed a limited number of ring oscillators to determine delays of clock resources in the clock network. The limited number of ring oscillators restricts the number of contexts of PIPs that can be verified. For example, using 10-15 manually-generated ring oscillators for a device such as the KINTEX® model XCKU040 from XILINX®, Inc., about 15% of the thousands of PIP contexts in the clock network of the device are covered. The delays of the untested PIP contexts are estimated based on the measured values. The estimation may result in too much margin in some PIP contexts and not enough margin in other PIP contexts.